package org.tis.tools.senior.module.developer.service;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import org.tis.tools.senior.module.developer.controller.request.HomePageShowEmphasisRequest;
import org.tis.tools.senior.module.developer.controller.request.RollBackAddRequest;
import org.tis.tools.senior.module.developer.controller.request.VerifyArtfRequest;
import org.tis.tools.senior.module.developer.controller.request.WorkitemAddAndUpdateRequest;
import org.tis.tools.senior.module.developer.entity.*;
import org.tis.tools.senior.module.developer.entity.vo.*;
import org.tmatesoft.svn.core.SVNException;

import java.text.ParseException;
import java.util.List;

/**
 * sWorkitem的Service接口类
 * 
 * @author Auto Generate Tools
 * @date 2018/06/20
 */
public interface ISWorkitemService extends IService<SWorkitem>  {

    /**
     * 新增工作项
     * @param request
     */
    Integer add(WorkitemAddAndUpdateRequest request);

    /**
     * 修改工作项
     * @param request
     */
    Integer update(WorkitemAddAndUpdateRequest request);

    /**
     * 查询登录用户的工作项
     *
     * @param userName
     * @return
     */
    List<SWorkitem> selectWorkitemByUser(String userName);

    /**
     *
     * @param workitemId
     * @return
     */
    SWorkitem selectOneById(Integer workitemId);

    /**
     * 工作项关联分支
     *
     * @param guidWorkitem
     * @param guidBranch
     */
    void workitemRelevanceBranch(Integer guidWorkitem, Integer guidBranch);

    /**
     * 取消关联分支
     * @param guidWorkitem
     */
    void workitemCancelBranch(Integer guidWorkitem);

    /**
     * 根本运行环境guid查询分支信息
     * @param workitemGuid
     * @return
     */
    SBranch selectBranchByWorkitemGuid(Integer workitemGuid);

    /**
     * 可关联的分支
     * @return
     */
    List<SBranch> mayRelevanceBranch();

    /**
     * 查询工作项详情及对应的分支路径
     * @param page
     * @return
     */
    Page<WorkitemBranchDetail> workitemFullPathDetail(Page<WorkitemBranchDetail> page,
                                                      EntityWrapper<WorkitemBranchDetail> wrapper);

    /**
     * 修改工作项状态为已取消
     * @param guidWorkitem
     */
    void updateStatusCancel(Integer guidWorkitem);

    /**
     * 修改工作项状态为已投产
     * @param guidWorkitem
     */
    void updateStatusPutProduct(Integer guidWorkitem) throws ParseException;

    /**
     * 为工作项添加分支
     * @param guid
     * @param branch
     */
    void insertBranch(Integer guid, SBranch branch) throws SVNException;

    /**
     * 为工作项拉工程
     * @param guid
     * @param projectGuids
     */
    void insertProjects(String guid, List<String> projectGuids) throws SVNException;

    /**
     * 获取工作项的工程详情
     * @param guid
     * @return
     */
    ProjectDetail selectProjects(Integer guid) throws SVNException;

    /**
     * 验证投放按钮是否显示
     * @param guidWorkitem
     * @return
     */
    boolean selectStandardListByGuid(Integer guidWorkitem);

    /**
     * 根据guid查询工作项的概况
     * @param guidWorkitem
     * @return
     */
    WorkitemGeneralDetail selectWorkitemGeneral(Integer guidWorkitem);

    /**
     * 查询此工作项的标准清单代码明细
     * @param guidWorkitem
     * @return
     */
    List<DeliveryProjectDetail> selectStandardListDetailByGuid(Integer guidWorkitem);

    /**
     * 查询此工作项的贮藏清单代码明细
     * @param guidWorkitem
     * @return
     */
    List<DeliveryProjectDetail> selectStashListDetailByGuid(Integer guidWorkitem);

    /**
     * 导出一个工作项所有的标准清单
     * @param guidWorkitem
     * @return
     */
    List<SStandardList> exportStandardList(Integer guidWorkitem);

    /**
     * 模糊查询标签
     * @param lable
     * @return
     */
    List<String> selectLableAll(String lable);

    /**
     * 实时验证artf
     * @param request
     * @return
     */
    boolean verifyArtf(VerifyArtfRequest request);

    /**
     * 查询主页展示信息
     */
    HomepageShowDetail selectHomepageShow();

    /**
     *
     * 主页重点追踪需求
     */
    List<WorkitemProfilesNameDetail> selectWorkitemProfilesDetail(HomePageShowEmphasisRequest request);

    /**
     * 查询此工作项的所有标准清单代码
     * @param guidWorkitem
     * @return
     */
    Page<SStandardList> selectStandardListAll(Integer guidWorkitem, Page<SStandardList> page,
                                              EntityWrapper<SStandardList> wrapper);

    /**
     * 生成回退申请
     * @param userId
     * @param request
     */
    void createRollback(String userId, RollBackAddRequest request);

    /**
     * 查询此工作项所有回退申请
     * @param guidWorkitem
     * @return
     */
    List<SRollback> selectRollbackByGuidWorkitem(Integer guidWorkitem);

    /**
     * 查询回退申请详情
     * @param guidRollback
     * @return
     */
    List<DeliveryProjectDetail> selectRollbackListByGuid(Integer guidRollback);

    /**
     * 查询此工作项的所有延迟投产申请
     * @return
     */
    List<SRepeal> selectRepealAll(Integer guidWorkitem);


}

